﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Modelo
{
   public class Pasajero
    {
        private Boolean VIAJANDO = true;
        private Boolean EN_COLA = false;
        private Dictionary<long, Estacion> _rutas;
        private double _horaLlegada;
        private Boolean _estado;
        private Estacion _estacionActual;
        private Estacion _estacionOrigen;
        private Estacion _estacionDestino;
        private Estacion _estacionOpcional;
        private List<Ruta> _posibleRuta;

        public Pasajero(double horaLlegada, Estacion origen, Estacion destino)
        {
            _horaLlegada = horaLlegada;
            _estado = EN_COLA;
            _estacionOrigen = origen;
            _estacionActual = origen;
            _estacionDestino = destino;
            _estacionOpcional = destino;
            _posibleRuta = new List<Ruta>();
        }

        public void cambiarEstado(Boolean estado)
        {
            _estado = estado;
        }

        public void cambiarEstacion(Estacion estacion)
        {
            _estacionActual = estacion;
        }

        public void llegoBus(Bus bus)
        {
            Ruta rutaBus = bus.darRuta();
            Boolean rutaRevisada = revisarRuta(rutaBus);
            if (rutaRevisada)
            {
                Boolean puedeSubir = bus.recibirPasajero(this);
                if (puedeSubir)
                {
                    _estacionActual.pasajeroSalio(this);
                }
            }            
        }

        public Boolean revisarRuta(Ruta ruta)
        {            
            // recalcularPosiblesRutas

            bool salida = _posibleRuta.Contains(ruta);
            return salida;
        }

        public double darHoraLlegada()
        {
            return _horaLlegada;
        }

        public Estacion darEstacionOrigen()
        {
            return _estacionOrigen;
        }

        public void definirRumbo(List<Ruta> rumbo)
        {
            _posibleRuta = rumbo;
        }
    }
}
